<?php
class GoodsModel extends Model{
	public $table='goods';//使用商品表
	private $goodsAttr;//商品属性模型
	private $goodsGallery;//图片相册模型

	//构造函数
	public function __init(){
		$this->goodsAttr=K('GoodsAttr');//属性模型
		$this->goodsGallery=K('goodsGallery');//相册模型
	}

	// 自动完成array(' 表单字段名 ',' 处理方法 ',' 方法类型 ',' 验证条件 ',' 处理时机 ' 4,表示不存在时,3任何动作都进行处理) 
	public $auto=array(
		array('is_hot','',0,4,3),
		array('is_new','',0,4,3),
		array('is_best','',0,4,3),
		// 上架时间转为时间戳
		array('sale_time', 'strtotime', 'function', 2, 3),
		);

	//自动验证
	public $validate=array(
		array('goods_name','nonull','商品名不能为空',2,3)
	);

	//关联栏目表和品牌表
	//  public $view=array(
	// 	'brand'=>array('_type'=>'right'),
	// 	'goods'=>array('_on'=>'brand.bid=goods.brand_bid','_type'=>'left'),
	// 	'category'=>array('_on'=>"goods.category_cid=category.cid")	
	// );

	//获得商品列表
	public function getPageList(){
		//分页类
		$count = $this->count();//商品条数
		// p($count);die;
		$page =new Page($count,5);//传入统计个数，一页分多少条
		//关联品牌表,商品表,栏目表
		$data = $this->join('__brand__ b right JOIN __goods__ g ON b.bid=g.brand_bid left join  __category__ c ON g.category_cid=c.cid')->order('g.category_cid')->limit($page->limit())->all();
		//返回的是二维数据
		return array('data'=>$data,'page'=>$page->show());
	}

	//添加商品
	public function addGoods(){
		if($this->create()){
			if($gid= $this->add()){
			//获得商品的主键id,添加副表数据
				$_POST['goods_gid']=$gid;
				M('goods_data')->add();
			// 如果货号为空时更新货号
				$this->setGoodsSn($gid);
			//处理首页列表页图片
				$this->setGoodsImage($gid);
			//添加商品相册  处理商品内容页图片 小、中 、大图片
				$this->goodsGallery->addImage($gid);
			//添加商品属性
				$this->goodsAttr->addAttr($gid);
				return true;
			}else{
                $this->error = '添加商品失败';
            }
		}
	}

	//更新主表和附表信息
	public function editGoods(){
		if ($this->create()) {
				// 更新主表
				$this->save();
				$gid = Q('gid', 0, 'intval');
				// 更新附表
				// M('goods_data')->where("goods_gid=".$gid)->save();
				M('goods_data')->where("goods_gid={$gid}")->save();
				//处理首页列表页图片
				$this->setGoodsImage($gid);
				//更新货号
				$this->setGoodsSn($gid);
				//更新商品相册
				$this->goodsGallery->addImage($gid);
				//更新商品属性
				$this->goodsAttr->addAttr($gid);
				return true;
		}else{
			$this->error='商品编辑失败';
		}
	}

	// 删除商品信息
	public function delGoods($gid){	
		// 删除主表商品
		$this->delImages($gid);
		// 删除goods_data附表信息
		M('goods_data')->where("goods_gid=$gid")->del();
		M('goods_attr')->where("goods_gid=$gid")->del();
		$this->del($gid);
		return true;			
	}

	//商品没有添加货号时，系统自动设置货号
	private function setGoodsSn($gid){
		if(empty($_POST['goods_sn'])){
			//使用另一个字符串填充字符串为指定长度,从左端开始填充,
			$goods_sn='lt_' . str_pad($gid, 6,0,STR_PAD_LEFT);
			$data=array(
				'gid'=>$gid,
				'goods_sn'=>$goods_sn
				);
			M('goods')->save($data);
		}
	}

	//更新首页列表页图片
	private function setGoodsImage($gid){
	//没有图片上传或图片上传有错误时，不进行处理
		if($_FILES['original_img']['error']!=0)return;
		//设置图片存储位置
		$upload=new Upload('Upload/goods/'.date('Y/m/d'));
		//调用图片上传函数上传图片
		$file = $upload->upload('original_img');
		//上传失败
		if(empty($file))return;
		$file=$file[0];
		//生成列表页图片
		$listImg=$file['dir'].$file['filename'].'_list_300x300.'.$file['ext'];
		//首页图片
		$IndexImg=$file['dir'].$file['filename'].'_index_400x400.'.$file['ext'];
		//尺寸目前是写死的，到时调用配置项数据
		//1: 固定宽度 高度自增 2: 固定高度 宽度自增 3: 固定宽度 高度裁切 
		//4: 固定高度 宽度裁切 5: 缩放最大边 6: 缩略图尺寸不变，自动裁切图片
		$image= new Image();
		//列表页
		$image->thumb($file['path'], $listImg, 300, 300, 6);
		//首页图片
		$image->thumb($file['path'], $IndexImg, 290, 280, 6);
		$data=array(
			'gid'=>$gid,//更新商品ID
			'original_img'=>$file['path'],//原图
			'goods_img'=>$IndexImg,//首页图
			'goods_thumb'=>$listImg//列表图
		);
		//编辑图片(如果存在图片直接删除);
		$files=M('goods')->find($gid);
		is_file($files['original_img']) and unlink($files['original_img']);
		is_file($files['goods_img']) and unlink($files['goods_img']);
		is_file($files['goods_thumb']) and unlink($files['goods_thumb']);
		//更新数据库图片
		return M('goods')->save($data);
	}
	public function delImages($gid){
		$files=M('goods')->find($gid);
		$imgs=M('goods_gallery')->where("goods_gid=$gid")->all();
		// p($files);
		// p($imgs);exit;
		// 图片表得到的数据是二位数组,需遍历后再删除
		foreach ($imgs as $img) {
			is_file($img['img_original']) and unlink($img['img_original']);
			is_file($img['img_url']) and unlink($img['img_url']);
			is_file($img['thumb_url']) and unlink($img['thumb_url']);
		};
		is_file($files['original_img']) and unlink($files['original_img']);
		is_file($files['goods_img']) and unlink($files['goods_img']);
		is_file($files['goods_thumb']) and unlink($files['goods_thumb']);
		// 删除相册表对应信息
		M('goods_gallery')->where("goods_gid=$gid")->del();
		//更新数据库图片
		return M('goods')->save();
	}

}//商品模型类结束